# AI文章生成服务
import requests
import json
import re
from typing import Dict, Tuple
from config import Config

class AIService:
    def __init__(self):
        self.api_key = Config.DEEPSEEK_API_KEY
        self.base_url = Config.DEEPSEEK_BASE_URL
        self.headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
    
    def generate_article(self, prompt: str, max_tokens: int = 2000) -> Dict[str, str]:
        """
        生成文章并预处理为标题和内容
        
        Args:
            prompt: 用户输入的提示词
            max_tokens: 最大生成token数
            
        Returns:
            Dict包含title和content
        """
        try:
            # 构建完整的提示词，要求AI生成标题和内容
            full_prompt = f"""
请根据以下要求生成一篇适合在头条发布的文章：

{prompt}

请按照以下格式输出：
标题：[在这里写标题]
内容：
[在这里写文章内容]

要求：
1. 标题要吸引人，控制在30字以内
2. 内容要有条理，适合网络阅读
3. 语言通俗易懂，有一定的趣味性
4. 字数控制在800-1500字之间
5. 可以适当使用表情符号增加趣味性
"""
            
            # 调用DeepSeek API
            response = self._call_deepseek_api(full_prompt, max_tokens)
            
            if response:
                # 解析返回的内容
                title, content = self._parse_article_response(response)
                return {
                    "title": title,
                    "content": content,
                    "raw_response": response,
                    "success": True,
                    "error": None
                }
            else:
                return {
                    "title": "",
                    "content": "",
                    "raw_response": "",
                    "success": False,
                    "error": "API调用失败"
                }
                
        except Exception as e:
            return {
                "title": "",
                "content": "",
                "raw_response": "",
                "success": False,
                "error": f"生成文章时发生错误: {str(e)}"
            }
    
    def _call_deepseek_api(self, prompt: str, max_tokens: int) -> str:
        """调用DeepSeek API"""
        try:
            data = {
                "model": "deepseek-chat",
                "messages": [
                    {
                        "role": "user",
                        "content": prompt
                    }
                ],
                "max_tokens": max_tokens,
                "temperature": 0.7,
                "stream": False
            }
            
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers=self.headers,
                json=data,
                timeout=60
            )
            
            if response.status_code == 200:
                result = response.json()
                return result["choices"][0]["message"]["content"]
            else:
                print(f"API调用失败: {response.status_code} - {response.text}")
                return None
                
        except Exception as e:
            print(f"调用DeepSeek API时发生错误: {str(e)}")
            return None
    
    def _parse_article_response(self, response: str) -> Tuple[str, str]:
        """
        解析AI返回的文章内容，提取标题和正文
        
        Args:
            response: AI返回的原始文本
            
        Returns:
            Tuple[标题, 内容]
        """
        try:
            # 查找标题
            title_match = re.search(r'标题[：:]\s*(.+?)(?:\n|$)', response, re.MULTILINE)
            if title_match:
                title = title_match.group(1).strip()
            else:
                # 如果没找到标题标记，尝试提取第一行作为标题
                lines = response.strip().split('\n')
                title = lines[0].strip() if lines else "未命名文章"
            
            # 查找内容
            content_match = re.search(r'内容[：:]\s*\n(.*)', response, re.DOTALL)
            if content_match:
                content = content_match.group(1).strip()
            else:
                # 如果没找到内容标记，使用除第一行外的所有内容
                lines = response.strip().split('\n')
                if len(lines) > 1:
                    content = '\n'.join(lines[1:]).strip()
                else:
                    content = response.strip()
            
            # 清理标题（去除可能的标点和格式符号）
            title = re.sub(r'^[【\[]*|[】\]]*$', '', title)
            title = title.strip('[]【】""''')
            
            # 确保标题不为空
            if not title or len(title.strip()) == 0:
                title = "AI生成文章"
            
            # 确保内容不为空
            if not content or len(content.strip()) == 0:
                content = response.strip()
            
            return title, content
            
        except Exception as e:
            print(f"解析文章内容时发生错误: {str(e)}")
            # 返回默认值
            return "AI生成文章", response.strip()
    
    def get_suggested_prompts(self) -> Dict[str, list]:
        """获取建议的提示词模板"""
        return {
            "科技": [
                "写一篇关于人工智能发展趋势的文章",
                "分析最新的智能手机技术创新",
                "探讨5G技术对日常生活的影响"
            ],
            "生活": [
                "分享10个提高生活质量的小技巧",
                "写一篇关于健康饮食的指南",
                "介绍适合上班族的运动方式"
            ],
            "教育": [
                "分析现代教育的发展方向",
                "写一篇关于终身学习重要性的文章",
                "探讨在线教育的优势和挑战"
            ],
            "娱乐": [
                "推荐几部值得观看的电影",
                "分析当前流行的音乐趋势",
                "写一篇关于网络游戏文化的文章"
            ],
            "财经": [
                "分析当前的投资理财趋势",
                "写一篇关于个人财务管理的指南",
                "探讨数字货币的发展前景"
            ]
        }
